package leetcode.linked;

import common.ListNode;

import java.util.LinkedList;
import java.util.List;

/**
 * 反转链表 II
 * 给你单链表的头指针 head 和两个整数 left 和 right ，其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点，返回 反转后的链表
 *
 * @author WangChenyu
 * @since 2024-04-16 14:30
 */
public class ReverseBetween {

    public static ListNode linkedSkip(ListNode head, int pos1, int pos2) {
        if (head == null || head.next == null || pos1 >= pos2) {
            return head;
        }

        int i = 1;
        ListNode tmp = null, cur = null;
        while (true) {
            if (i < pos1) {
                head = head.next;
            }
            if (i == pos1) {
                cur = head;
                tmp = head;
            }
            if (i > pos1 && i < pos2) {
                tmp = tmp.next;
            }
            if (i == pos2) {
                tmp.next = null;
                break;
            }
            i++;
        }
        return cur;
    }


    public static void main(String[] args) {
        ListNode node0 = new ListNode(0, null);
        ListNode node1 = new ListNode(1, node0);
        ListNode node2 = new ListNode(2, node1);
        ListNode node3 = new ListNode(3, node2);
        ListNode node4 = new ListNode(4, node3);
        ListNode node5 = new ListNode(5, node4);
        ListNode node6 = new ListNode(6, node5);
        ListNode node7 = new ListNode(7, node6);
        System.out.println(linkedSkip(node7, 2, 6));

        List<Integer> cur = new LinkedList<>();
        cur.add(1);
        cur.add(2);
        cur.add(3);
        cur.add(4);
        List<Integer> list = cur.subList(1, 2);
        System.out.println(node7);
    }
}
